import { GLOBAL } from "@/configs/request";

/**
 * @function getImageUrl
 * @param url url
 */
export const getImageUrl: Function = (url): string => {
  return new URL(url, import.meta.url).href
}


/**
 * @function consoleRGB
 * @param str1 第一块文字
 * @param str2 第二块文字
 * @param str3 第三块文字
 */
export function consoleRGB(str1 = "", str2 = "", str3 = "") {
  console.log(
    `%c${str1}%c${str2}%c${str3} `,
    `color: ${"white"};font-weight: bold;font-size: 1rem;background: #000; border-top-left-radius: 5px;border-bottom-left-radius: 5px;padding:5px 15px;border-right: 1px solid white;`,
    `color: ${"white"};font-weight: bold;font-size: 1rem;background:#000;padding:5px 15px;border-right: 1px solid white;`,
    `color: ${"white"};font-weight: bold;font-size: 1rem;background: #000;border-top-right-radius: 5px;border-bottom-right-radius: 5px;padding:5px 15px`
  );
}

/**
 * @function tokenVerify
 * @param _this 上下文指向
 * @param status 状态码
 * @param callback 回调
 * @returns 
 */
export const tokenVerify: Function = (_this, status: number, callback: Function) => {
  if (status === GLOBAL.SUCCESS) return callback();
  else {
    // 设置localStorage
    localStorage.removeItem("token");
    localStorage.setItem('state', 'false')
    if (_this) {
      _this.$message({
        message: "登录过期",
        type: 'error'
      })
      setTimeout(() => {
        // 更改界面transition方式
        _this.$store.commit('setTransition', 'fadeX')
        // 路由跳转
        _this.$router.push({ name: 'login' })
      }, 1000)
    }
  }
}


/**
 * @function debounce 防抖
 * @param fn 防抖对象函数对象
 * @param params 防抖对象函数的参数
 * @param time 防抖时间 / ms
 * @description 触发高频事件后 n 秒后函数只会执行一次，如果 n 秒内高频事件再 次被触发，则重新计算时间
 */
export const debounce: Function = (fn: Function, params: Array<unknown>, time: number = 300) => {
  let begin: number = 0;
  return function () {
    let now: number = new Date().getTime();
    if (now - begin >= time) {
      if (params) fn.call(fn, ...arguments, ...params);
    }
    begin = now;
  }
}



/**
 * @function throttle 节流
 * @param fn 节流对象函数对象
 * @param params 节流对象函数的参数
 * @param time 节流时间 / ms
 * @description 高频事件触发，但在 n 秒内只会执行一次，稀释函数的执行频率
 */
export const throttle: Function = (fn: Function, params: Array<unknown>, time: number = 300) => {
  let begin: number = 0;
  return function () {
    let now: number = new Date().getTime();
    if (now - begin >= time) {
      if (params) fn.call(fn, ...arguments, ...params);
      begin = now;
    }
  }
}